import Vue from 'vue'
import Vuex from 'vuex'
import mutations from './mutations'
import getters from './getters'
import actions from './actions'

Vue.use(Vuex)

const state = { //要设置的全局访问的state对象
	cartList: [] //要设置的初始属性值
}
/**
 * 按照步骤来 一二三
 * 1 getters
 * 第一步过后 你已经可以用this.store.state.cartList在任何一个组件里面获取cartList定义的值了
 * 但是这不是理想的获取方式
 *
 * 2 mutations
 * 光有定义的state的初始值，改变它不是我们想要的需求，接下来要说的就是mutations了，mutattions也是一个对象，
 * 这个对象里面可以放改变state的初始值的方法，具体的用法就是给里面的方法传入参数state或额外的参数,
 * 然后利用vue的双向数据驱动进行值的改变，同样的定义好之后也把这个mutations扔进Vuex.Store里面
 *
 * 这时你就可以通过this.store.commit('INCREMENT_COUNT','2') 在别的组件里面进行改变cartList的值了
 * 但是  但是 这个 还不是 理想的改变值的方式
 *
 * 因为 在Vuex中 mutations 里面的方法都是同步事务
 * 意思就是
 * 这里的一个this.store.commit('INCREMENT_COUNT','index')方法，两个组件里用 执行得到的值 每次都是一样的 这样肯定不是理想的需求
 *
 * 3 actions
 * 好在vuex官方API还提供了一个actions，这个actions也是个对象变量，最大的作用就是里面的Action方法 可以包含任意异步操作，
 * 这里面的方法是用来异步触发mutations里面的方法，actions里面自定义的函数接收一个context参数和要变化的形参，
 * context与store实例具有相同的方法和属性，所以它可以执行context.commit(' '),然后也不要忘了把它也扔进Vuex.Store里面：
 *
 * 现在你在外部组件里进行全局执行 actions 里面的方法 时 你只需要执行
 *  this.$store.dispatch('addToCart',2);   //2要变化的实参
 * 这样就可以全局改变 cartList 的值了
 *
 * 4 modules 模块化 以及 组件中引入 mapGetters、mapActions 和 mapStates的使用
 *
 *
 **/


const store = new Vuex.Store({
	state,
	mutations,
	getters,
	actions
})

export default store




//export default new Vuex.Store({
//  state: {
//  },
//  mutations: {
//  },
//  actions: {
//  },
//  modules: {
// }
//})
